package com.biz.primus.ms.member.dao.po;

import com.biz.primus.base.enums.ChannelTypes;
import com.biz.primus.model.member.enums.GroupTypes;
import com.biz.primus.ms.base.jpa.converter.SetLongConverter;
import com.biz.primus.ms.base.jpa.po.BaseEntityPKIncrement;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.Set;

/**
 * 会员组
 *
 * @author jun.liu
 * @date 2017年10月22日
 * @reviewer
 * @see
 */
@Entity
@Table(name = "member_group")
@Data
@EqualsAndHashCode(callSuper = true)
public class MemberGroup extends BaseEntityPKIncrement
{

    /**
     * 组名称
     */
    @Column(name = "name", length = 32, nullable = false, unique = true)
    private String name;

    /**
     * 分组说明
     */
    @Column(name = "group_desc", length = 100)
    private String groupDesc;


    /**
     * 注册渠道
     */
    @Enumerated(EnumType.STRING)
    private ChannelTypes regChannelType;

    /**
     * 所在城市id
     */
    @Column
    private Integer cityId;

    /**
     * 订单成功数下限
     */
    @Column
    private Integer lowerOrderSucNum;

    /**
     * 订单成功数上限
     */
    @Column
    private Integer upperOrderSucNum;


    /**
     * 消费订单总金额下限
     */
    @Column
    private Integer lowerRecencyOrderMoney;

    /**
     * 消费订单总金额上限
     */
    @Column
    private Integer upperCOrderMoney;

    /**
     * 平均下单时间上限 按照比例算出后 的取值范围
     */
    @Column
    private Integer lowerSvgOrerTime;

    /**
     * 平均下单时间上限 按照比例算出后 的取值范围
     */
    @Column
    private Integer upperSvgOrerTime;

    /**
     * 最近下单取值开始时间
     */
    @Column
    private LocalDateTime recentOrderStartTime;

    /**
     * 最近下单取值结束时间
     */
    @Column
    private LocalDateTime recentOrderEndTime;

    /**
     * 开始下单取值开始时间
     */
    @Column
    private LocalDateTime startOrderStartTime;

    /**
     * 开始下单取值结束时间
     */
    @Column
    private LocalDateTime startOrderEndTime;

    /**
     * 分组类型
     * RFM 指的8种指标 后台新增勾选多个指标的时候新增多个
     */
    @Enumerated(EnumType.STRING)
    @Column
    private GroupTypes groupType;

    /**
     * 当GroupTypes=RFM 的时候 对应的是MemberGroupRFMRule的id
     *
     * 后台新增勾选多个指标的时候new对个当前组对应
     */
    @Column(name = "rule_id")
    private Long ruleId;

    /**
     * 当前组归属的 会员id集合
     */
    @Convert(converter = SetLongConverter.class)
    @Column(columnDefinition = "TEXT")
    private Set<Long> memberIds;

}
